Host processor systems may store and retrieve data using a storage device containing a plurality of host interface units (host adapters), disk drives, and disk interface units (disk adapters). Such storage devices are provided, for example, by EMC Corporation of Hopkinton, Mass., and reference is made to disclosures in U.S. Pat. No. 5,206,939 to Yanai et al., U.S. Pat. No. 5,778,394 to Galtzur et al., U.S. Pat. No. 5,845,147 to Vishlitzky et al., and U.S. Pat. No. 5,857,208 to Ofek, which are incorporated herein by reference. The host systems access the storage device through a plurality of channels provided therewith. Host systems provide data and access control information through the channels of the storage device and the storage device provides data to the host systems also through the channels. The host systems do not address the disk drives of the storage device directly, but rather, access what appears to the host systems as a plurality of logical volumes. The logical volumes may or may not correspond to the actual disk drives.
A cyclic redundancy check (CRC) is an error-detecting code used in connection with storing and/or transmitting data blocks. A CRC-enabled sending/storing device calculates a short, fixed-length binary sequence, known as the CRC code, or just the CRC, for each block of data and sends or stores/embeds the CRC with the data block. When the data block is read or received in connection with data transmission or scanning, the reading/receiving device repeats the CRC calculation and performs a comparison (e.g., an XOR operation); if the new CRC does not match the one calculated earlier, or otherwise indicates an inconsistency, then the data block contains a data error and the reading/receiving device may take corrective action such as rereading or requesting that the data block be sent again. In some cases, it may also be possible to correct the data, for example using an error correcting code (ECC), such as forward error correction (FEC) information, stored in connection with the data. The CRC may be 16-bit protection word provided to ensure data integrity per data block in data interchange format (DIF). The computation of the CRC may resemble a long division operation in which the quotient is discarded and the remainder becomes the result, although the arithmetic used is carry-less arithmetic of a finite field. For a general discussion of CRC computations, reference is made to Ramabadran et al., “A Tutorial on CRC Computations,” IEEE Micro, Vol. 8, Issue 4, 1988, pp. 62-75, which is incorporated herein by reference.
Data may be stored in a storage array, such as a redundant array of independent disks (RAID) system, in which the data may be mirrored, striped or otherwise distributed across multiple disk drives or storage devices. RAID is a known technology that provides increased storage functions and reliability through redundancy by combining multiple disk drive components into a logical unit and where data is distributed across the drives in one of multiple ways referred to as RAID levels. Various RAID levels and systems may be used in connection with providing various levels of data reliability, redundancy and I/O performance, using such features as data stripping, mirroring and the use of parity information, among other technologies, as further discussed elsewhere herein. A RAID system may provide for verification of stored data validity using a parity disk drive containing a parity array in which is stored the result of XOR operations of multiple data blocks, or portions thereof, stored in other disk drives of the RAID system. It is known that a CRC may be stored/transmitted together with parity information associated with distributed data blocks in a RAID system, and a CRC associated with each of the received data blocks may be determined and compared with the CRC transmitted with the parity information. Reference is made to, for example, U.S. Pat. No. 7,073,024 to Chilton entitled “Data Protection Method Wherein Data Protection Code is Stored Together With Parity,” which is incorporated herein by reference.
In a storage device, a CPU transfer mode may be provided to allow the CPU to move data between memories, such as a global memory and local control storage spaces for global memory stored locally to the CPU. For I/O data in DIF format, the CPU may check each data block's CRC to verify its integrity. Furthermore, data scrubbing is an error correction technique that involves periodic inspection, including use of CRCs, of a storage array, e.g., a RAID array, for errors and then correction of the errors using an ECC or another copy of the data. Data scrubbing may be performed on a sector by sector basis of the storage array and, in known systems, may involve the transmission and storing of the striped data for a sector being evaluated to a global memory of the array in order to be verified using the CRCs and/or corrected using stored parity information. In cases of storage array scanning with data scrubbing and/or integrity verification of data transmission, known CRC verification algorithms may involve substantial processing requirements corresponding to the amount of data scanned or transferred. As an example, for a 64K Read-Hit benchmark, known CRC computing and verification may consume 60% (or even higher) of total CPU cycles.
Accordingly, it would be desirable to provide a system that performs operations for error detecting and integrity verification, e.g., in connection with a RAID integrity scan, faster and more efficiently.